Formation-R-perfectiomment

Module Rappels et compléments sur R et RStudio

SSP/DEMESIS

16/01/2025

Sommaire

  • 1 Travailler avec R au ministère
  • 2 Les différents objets R
  • 3 Indexation d’objets avec R
  • 4 Traitement de données

0.1 Avant-propos


Ce diaporama de formation a été rédigé dans le but d’être le support visuel des formations dispensées au MASA.

Ces formations s’adressent à des agents qui ont suivi la formation R initialisation.

0.2 Avant-propos

Elles sont données en présentiel sur une durée de trois journée, les modules de cette formation sont ajustables suivants le choix des agents.

Champ couvert par cette formation

Ce support couvre les rappels et complèments sur R et l’environnement du Minsitère.

Pour information, Les Modules de la formation R-perfectionnement sont:

  • 01 - Module Rappels

  • 02 - Module Fonctions

  • 03 - Module Cartes statiques et interactives

  • 04 - Module Création de graphiques avec ggplot2

  • 05 - Module Quarto

  • 06 - Module Parquet

  • 07 - Module Initiation à l’écriture d’applications Shiny

Ils sont orientés pour être utile aux agents du SSM MASA et se concentrent sur une utilisation de R via RStudio qui est mise à disposition des agents sur la plateforme interne Cerise basée sur RStudio Workbench.

1 Travailler avec R au ministère

1.1 Présentation

Logiciel de traitement de données et analyse statistique :

  • offre un environnement interactif de développement statistique, analytique et graphique ;

  • est doté d’un langage de programmation R ;

  • permet d’accéder à des données, de les manipuler et les analyser ;

  • S’interface avec les bases de données : Oracle, SYBASE, PostgreSQL, SQLITE…

Remplace SAS ou SPSS

Logiciel IDE : Integrated Development Environment

1.2 Pourquoi utiliser R

Avantages Inconvénients
  • logiciel gratuit et open source
  • Langage informatique nouveau à appréhender
  • développement actif : communauté d’utilisateurs de plus en plus importante
  • pas de génération de code par « clic-bouton »
  • nombreux packages (« outils ») scientifiques
  • compatibilité des versions
  • très bonnes capacités graphiques
  • calculs sur de grosses volumétries plus « gourmand » en CPUs et Mémoire
  • rapidité des traitements (R travaille en mémoire)
  • documentation et aide souvent disponibles qu’en anglais

1.3 Comment travailler avec R au MASA ?

Depuis la plate-forme CERISE :

  • ⇒ Adresse : https://rstudio.agriculture.rie.gouv.fr

  • ⇒ PISTACHE : Pistache > Traitements statistiques et Diffusion > R > Migration SPSS et SAS vers R > Accès au WIKI Cerise - R > Accéder à Cerise

En local sur son poste, sans intervention de Pastel

Existence d’une plate-forme CERISE de Préproduction :
https://rstudio-pprd.agriculture.rie.gouv.fr

1.4 Fenêtres dans RSTUDIO

1.5 Organisation sous CERISE

Cerise est organisé en plusieurs répertoires :

  • 00-Espace-Personnel => espaces personnels des agents, accessible par l’agent uniquement

  • 01-Espace-de-Partage => lieu de partage général entre les différents acteurs

  • 02-Espace-de-Production => plateforme de stockage des données brutes collectées, ainsi que des fichiers de données et programmes issus des traitements statistiques réalisés par l’équipe projet

  • 03-Espace-de-Diffusion => mise à disposition au sein du SSM des données issues des traitements statistiques réalisés en amont => Ces deux derniers espaces sont découpés par opérations statistiques

  • 04-Espace-Echanges => stockage des fichiers de données à transmettre aux autres applications du SI CASSIS (par exemple Agreste) ainsi qu’aux SI des partenaires extérieurs

2 Les différents objets R

2.1 Les vecteurs :

  • Objet élémentaire de R, une dimension

  • Ensemble de valeurs, appelées éléments, de même nature (nombres, chaînes de caractères, booléens…)

  • Création de vecteurs avec la fonction c() :

x ← c(TRUE, TRUE, FALSE) is.logical(x)

x ← c(8.04, 18.01, 11.05, 14.05) is.numeric(x)

x ← c("Chaîne1", "804", "Chaîne3") is.character(x)

  • Fonctions utiles sur les vecteurs : length(), class(), names(), summary(), sort(), head(), tail(), unique()

2.2 Les matrices et arrays :

  • Une matrice est composée d’un ou de plusieurs éléments de mêmes types, organisés en deux dimensions.

Une array est composée d’un ou de plusieurs éléments de mêmes types, organisés en plusieurs dimensions.

  • Création avec les fonctions matrix et array :

x ← matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3) création d'une matrice de numériques avec deux lignes et trois colonnes, remplissage par colonne.

x ← array (c(1,2,3,4,5,6,7,8), dim=c(2,2,2)) création d'une array de numériques avec trois dimensions, chaque dimension comprenant deux éléments (~ cube)

  • Fonctions utiles : dim(), nrow(), ncol()

2.3 Les listes et data.frame :

  • Une data.frame est composée de vecteurs nommés de tailles égales mais pouvant être de types différents.

  • Une liste est composée d’objets différents.

  • Création avec les fonctions list() et data.frame() :

x ← list(c(TRUE, TRUE, FALSE), 1er élément : un vecteur de trois booléens

c(8.04, 18.01, 11.05, 14.05), 2e élément : un vecteur de quatre numériques

"804") 3e élément : un vecteur d'une chaîne de caractères

x ← data.frame(nom=c("Yaël","Luan","Jade"), 1er élément : un vecteur « nom » de trois chaînes de caractères

sexe = factor(c("H","F","F"), 2e élément : un vecteur « sexe » de trois chaînes de caractères

age = c(5,1,3)) 3e élément : un vecteur « age » de trois numériques

3 Indexation d’objets avec R

3.1 Vecteur, indexation avec les crochets:

  • Indexation par position :

x ← c(''Marion'', ''Benjamin'', ''Hélène'', ''Raymond''))

x[1] renvoie ''Marion''

x[c(1, 2)] renvoie le vecteur c(''Marion'', ''Benjamin'')

  • Indexation par condition logique :

x ← c(8.04, 18.01, 11.05, 14.05)

x[x < 10] renvoie 8.04

x[x > 10] renvoie le vecteur c(18.01, 11.05, 14.05)

x[x >10 & x < 15] renvoie le vecteur c(11.05, 14.05)

3.2 Matrices et arrays,indexation avec les crochets:

Indexation par position :

x ← matrix(c(''Marion'', ''Benjamin'', ''Hélène'', ''Raymond''), nrow = 2, ncol = 2)

x[1,] renvoie le vecteur c(''Marion'', ''Hélène'')

x[,2] renvoie le vecteur c(''Hélène'', ''Raymond'')

x[2,1] renvoie ''Benjamin''

3.3 Listes :

  • Indexation par position :

x ← list(c(TRUE, TRUE, FALSE), c(8.04, 18.01, 11.05, 14.05), “804”)

x[[2]] renvoie le deuxième vecteur de la liste x soit c(8.04, 18.01, 11.05, 14.05)

x[[2]][1] renvoie le premier élément du deuxième vecteur de la liste x soit 8.04

  • Indexation par nom si les vecteurs sont nommés avec l’opérateur $ :

x ← list(grp = c(''Auguste'', ''Justine'', ''Sébastien'', ''Anne-Marie''), prt = c(''Hélène'', ''Raymond''), enf = c(''Marion", ''Benjamin'')

x$grp renvoie le vecteur nommé ''grp'' de la liste x soit c(''Auguste'', ''Justine'', ''Sébastien'', ''Anne-Marie'')

x$enf[1] renvoie le premier élément du vecteur nommé ''enf'' de la liste x soit ''Marion''

3.4 Data.frame :

  • Indexation par position : comme pour les matrices

  • Indexation par nom : les vecteurs d’une data.frame sont nommés et accessibles directement dans les crochets ou via l’opérateur $

  • Les moyens d’indexation peuvent se combiner

→ Il y a donc une multitude de façons d’accéder à une valeur dans un data.frame !


4 Traitement de données

4.1 Les tables de données

Les tables de données sont très souvent des objets de type data.frame. Fonctions utiles :

  • str() donne la structure de la table, names() le vecteur des noms de colonnes

  • head() et tail() affichent respectivement, par défaut, les 6 premières et les 6 dernières lignes de la table

  • dim() renvoie un vecteur composé du nombre de lignes et du nombre de colonnes de la table

4.2 Manipulation de données

  • La partie Manipulation de données va fournir les outils nécessaires aux traitements classiques à opérer sur une table de données.

  • A part pour la lecture et l’écriture de fichiers, les outils proposés relèvent des packages dplyr et tidyr : ils sont d’un usage plus aisé que les outils R de base et couvrent beaucoup des fonctionnalités les plus courantes.

4.3 Outils DPLYR & TIDYR

  • Objectif de dplyr : rassembler dans un seul package les outils de manipulation de données les plus importants pour l’analyse des données

    • ⇒ ensemble de fonctions correspondant à un ensemble d’opérations élémentaires
  • Deux principes pour les packages tidyr et dplyr :

    • Usage de fonctions « verbe » toutes construites sur le même principe : le premier paramètre est la table de données sur laquelle on travaille.

    • Usage de l’opérateur pipe (issu du package magrittr) Dans R-Studio, le raccourci clavier pour cet opérateur est : Ctrl + Shift + M

4.4 Filtre et sélection dans une table 1/2

  • Avec R de base, on utilise les techniques d’indexation

ma_table[1,] : toutes les variables pour la première observation

ma_table[,4] : toutes les observations de la 4e variable

ma_table[,''Profession''] : toutes les observations de la variable Profession

ma_table[1,4] : Première observation de la 4e variable

4.5 Filtre et sélection dans une table 2/2

  • Avec le package dplyr :

    • Pour sélectionner des colonnes dans une table, on utilise la fonction

      • select() maTable %>% select(noms_des_colonnes)
    • Pour filtrer les lignes dans une table à l’aide de conditions logiques, on utilise la fonction filter()

      • maTable %>% filter(conditions)

ma_table %>% filter(Profession == ''Militaire'')

ma_table %>% filter(Age < 30) %>% select(Nom_prenom)

4.6 Création ou modification de variables dans une table

  • Avec R de base, on utilise l’opérateur d’affectation :

    • table$new_var <- variable → formule générique

    • table$new_var <- valeur_constante → création d’une constante

    • table$new_var <- fonction(table$var1) → création à partir d’une formule

    • table$new_var <- table$var1 + table$var2 → création à partir d’opérations

    • table$new_var <- vecteur1 ou table1$new_var <- table2$var1 → création à partir de variables externes

    • table$new_var <- ifelse(table$varref < x, val1, val2) outable$new_var <- case_when(table$varref < x ~ val1, TRUE ~ val2) → traitement conditionnel

4.7 Création ou modification de variables dans une table

  • Avec le package dplyr, on utilise la fonction mutate() qui permet de créer plusieurs variables à la fois et permet de s’affranchir de l’indexation :

    • table ← table %>% mutate(new_var1 = var1, newvar2 = var2) → formule générique

    • table ← table %>% mutate( new_var1 = constante, → création d’une constante new_var2 = fonction(var1), → création à partir d’une formule

      new_var3 = var1 + var2,→ création à partir d’opérations arithmétiques
      new_var4 = vecteur1) → création à partir de variables externes

    Pour modifier une variable on affecte la nouvelle valeur à une variable existante

4.8 Fonctions utiles au traitement des chaînes de caractères

4.9 Tri dans une table

  • Pour trier une table selon une ou plusieurs variables, on utilise la fonction arrange()

maTable %>% arrange(variables_de_tri)

→ possibilité de trier selon plusieurs colonnes : les variables de tri doivent être séparées par une virgule.

→ on encadre les variables qu’il faut trier de façon décroissante par la fonction desc().

4.10 Fusion de tables

  • Pour fusionner deux tables en utilisant une ou plusieurs variables de jointure, on utilise les fonctions XXX_join()

4.11 Joindre des tables avec une variable de jointure

4.12 Fusion de tables

  • Il est possible de réaliser une jointure à l’aide de plusieurs variables identifiantes : l’argument by s’écrit alors c(‘’id1’‘,’‘id2’’, …)

  • Lorsque les variables de jointure ont des noms différents dans les deux tables, l’argument by prend comme paramètre un vecteur du type c(‘’id1_tab1’’ = ‘’id1_tab2’‘,’‘id2_tab1’’ = ‘’id2_tab2’’,…)

  • Si rien n’est précisé, la fusion se fait sur l’ensemble des variables portant le même nom dans les deux tables

4.13 Agrégation dans une table

  • Pour résumer les données d’une table en une seule statistique, on utilise la fonction summarise()

maTable %>% summarise(fonctions_stat(variable))

  • Pour agréger les données d’une table par groupe d’une ou plusieurs variables catégorielles on utilise la fonction group_by() avant la fonction summarise()

maTable %>% group_by(var_groupe)%>% summarise(fonctions_stat(variable))%>% ungroup()

→ possibilité de calculer plusieurs statistiques en séparant les instructions par une virgule

→ on peut utiliser les fonctions statistiques de base telles que max, min, mean, sd, n…

→ ungroup permet de ne plus tenir compte du regroupement par la suite

4.14 Transposition ou réorganisation de table

  • Pour réorganiser une table, c’est à dire passer des lignes en colonnes ou inversement, on utilise les fonctions pivot_wider() et pivot_longer() du package tidyr.
maTable %>% pivot_wider (co l_de_noms, col_de_valeurs) maTable %>% p ivot_longer( variables_apiv oter , names_to = "indicate ur", values_to = "valeur")

col_de_noms = nom de la variable dont les modalités deviendront les intitulés de colonne

col_de_valeurs = nom de la variable à utiliser pour remplir les colonnes

variables_a_pivoter = nom de l’ensemble des variables à représenter

names_to = nom de la première colonne à créer

values_to = nom de la deuxième colonne à créer

4.15 Lecture/ Ecriture de fichiers

Type Lecture Ecriture
Texte la fonction r e ader::read_delim et ses dérivées read_csv, read_csv2, read_tsv, read_fwf la fonction r e adr::write_delim et ses dérivées write_csv, write_csv2…
RDS Fonction read_rds Fonction readr::write_rds
XLS les fonctions du package readxl les fonctions du package openxlsx
SAS ou SPSS les fonctions read_sas et read_spss du package haven. Attention : il vaut mieux exporter au format texte dans le logiciel d’origine pour le lire en tant que données texte dans R. il vaut mieux exporter au format texte et lire le fichier dans le logiciel d’origine en tant que fichier au format texte !
ODS la fonction read_ods du package readODS la fonction write_ods du package readODS
Parquet Le package arrow et dplyr Le package arrow et dplyr

4.16 Base de données avec R

  • R offre la possibilité d’effectuer des requêtes SQL sur des bases de données externes.

  • Des informations pour la connexion sont nécessaires : library(RPostgres)

cnx <- dbConnect(Postgres(), dbname = ''sirene'', port = 5432, host = ''00.11.22.33'', user = ''nom_user'', password = ''mdp'')

  • Il suffit ensuite d’écrire les requêtes normalement à l’aide de la fonction dbGetQuery : dbGetQuery(cnx, ''SELECT * FROM TABLE'')